package com.hellowx.qydcdev.service;

import com.github.pagehelper.PageInfo;
import com.hellowx.qydcdev.entity.OrderPay;
import com.hellowx.qydcdev.entity.OrderVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * Created on 2022/1/10.
 *
 * @author Hello WX
 */
public interface OrderService {

    /**
     * 创建订单
     * @param json  订单数据 Json字符串,前端采用 encodeURIComponent() 编码
     * @return 订单编号
     */
    long createOrder(String json);

    /**
     * 模拟支付
     * @param orderId 订单id
     * @return 是否成功
     */
    boolean toPay(long orderId);

    /**
     * 查询订单列表,通过顾客id
     * @param customerId 顾客id
     * @param pageNum 页码
     * @param pageSize 页面大小
     * @return pageHelper 的 PageInfo
     */
    PageInfo<OrderVO> listOrderByCustomerId(Long customerId, int pageNum, int pageSize);

    /**
     * 通过店铺id 查询顾客列表
     * @param businessId 店铺id
     * @param pageNum 页码
     * @param pageSize 页面大小
     * @return pageHelper 的 PageInfo
     */
    PageInfo<OrderVO> listOrderByBusinessId(Long businessId, int pageNum,int pageSize);

    /**
     * 通过订单id 获取订单对象
     * @param orderId 订单对象
     * @return 订单对象
     */
    OrderVO getOrderByOrderId(long orderId);

    /**
     * 查询点单
     * @param orderId 订单id
     * @param payNo 支付编号
     * @param pageNum 页码
     * @param pageSize 页面大小
     * @param request request
     * @return pageHelper 的 PageInfo
     */
    PageInfo<OrderPay> listOrderBySearch(Long orderId, Long payNo, int pageNum, int pageSize, HttpServletRequest request);

    /**
     * 退订
     * @param orderId 订单id
     * @param i 订单id
     * @return msg
     */
    String unsubscribe(Long orderId, int i);

    /**
     * 各种订单饼图
     * @param request request
     * @return list
     */
    List<Map<String, Object>> variousOrdersPie(HttpServletRequest request);

    /**
     * 按月统计
     * @param request request
     * @return map
     */
    Map<String, Object> countOrderByMonth(HttpServletRequest request);

    /**
     * 按日统计
     * @param request request
     * @return map
     */
    Map<String, Object> countOrderByDay(HttpServletRequest request);

    /**
     * 统计前8位
     * @param request request
     * @return map
     */
    Map<String, Object> countGoodsOrderTop8(HttpServletRequest request);
}
